home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
2
/
u_mind.zip
/
U-MIND.DOC
< prev
Wrap
Text File
|
1985-03-05
|
51KB
|
920 lines
-----------------------------------------------
: :
: Supplement To Ultra-Utilities Documentation :
: :
: >>>>>> Ultra-Mind <<<<<< :
: :
: The Intelligent Database Program Generator :
: :
-----------------------------------------------
RELEASE 1.0, First Release, December, 1983
Author: Wat Buchanon
Ultra-Mind program and documentation Copyright (C), 1983, The
FreeSoft Company, P.O. Box 27608, St. Louis, MO 63146. All Rights
Reserved. Please see Ultra-Utilities documentation for warranty and
duplication policy.
Table Of Contents
-----------------
Introduction........................................UM-1
Defining And Generating Your Database...............UM-2
How To Use The Generated Program....................UM-8
Appendix A: Format Of Ultra-Mind Disk Files.........UM-11
Appendix B: Wish List...............................UM-13
Appendix C: The Ultra-Utilities.....................UM-14
Appendix D: Limited License For Ultra-Mind..........UM-15
UM-1) Introduction
------------
At FreeSoft, we do quite a lot of database work, both for ourselves
and for clients. After writing about the seven millionth database
manager, we came to a startling conclusion: very little was actually
changing from program to program. We admittedly are experts when it
comes to reinventing the wheel, but this time a thought struck us,
"Why not write a database program generator?" (TA-DA! Sound of
trumpets...). Well, that was several years ago, and Ultra-Mind is
the end result. Basically what it does is allow you to set up your
unique database needs, and then actually writes a dedicated database
program in BASIC while you watch.
What we found was that we were doing in a few minutes what used to
take hours or days. Here's a brief outline of Ultra-Mind's
capabilities and features:
1) This program allows you to set up a customized data entry system
and then writes a dedicated BASIC database manager program.
2) The data entry can be divided into multiple screens, called
"pages".
3) Several different types of input fields are supported: Numeric,
Alphanumeric, Formatted Numeric, Calculated, Automatic Date, and
Automatic Time. In addition, the user can specify any keys that
are restricted from entry for each individual field (No Z's
allowed, for instance).
4) Non-field symbols, such as titles or borders, can be placed any-
where on the data entry screens for a truly professional
appearance.
5) Generated program is documented with remarks for easy
customization.
6) Sophisticated hashing algorithm nullifies BASIC's slow execution.
Typical record access (no matter how many records in the system)
when the key field is known is under 1/2 second.
7) Knowledge of BASIC, data-file input/output routines, or other
special functions is not required. A small amount of BASIC
formula format is helpful for using calculation fields.
8) All generated programs can be compiled for added speed under the
Search and List functions.
9) Number of fields and total field characters dependent only on
available memory (total field characters per record must be less
than 65,536 characters not counting program size).
We hope you'll enjoy this package and will choose to support The
FreeSoft Company in our endeavor to bring you the most interesting
software at the best price. We place this product in your hands at
no cost in order for you to truly judge its appropriatness for your
applications.
UM-2) Defining And Generating Your Database
-------------------------------------
Before executing the Ultra-Mind program generator, you should insure
that the following programs are on the diskette in your logged
(default) disk drive:
1) Ultra-Mind program generator (U-MIND.BAS)
2) Ultra-Mind skeleton program (SKELETON.BAS)
3) BASIC programming language (BASIC.COM or BASICA.COM)
From the DOS prompt, type: BASIC U-MIND
and the program should load and execute after a few seconds. You
will first be presented with the question:
Do you wish to:
1) Define a database
2) Generate an already defined database
You should reply by pressing the '1' key (don't press <ENTER> after
this). The program will ask you for a filename for the resulting
program (8 characters, first character alphabetic). DO NOT add an
extension (a period followed by 1-3 characters) to this filename. The
program will now ask you for the title of the program and the
author's name (yours!). Finally, you'll be asked which disk drive
will later be used to hold the data file. You should have a disk
with plenty of room in this drive, as the generated program itself,
as well as several other information files will be sent to this drive
while Ultra-Mind is working.
You are now presented with the screen layout display. This display
is used to tell Ultra-Mind the information you wish to have displayed
in your database program data entry screens, as well as to define the
type of input fields.
The bottom of the screen is used as a message area in both the
program generator and in your generated program. Therefore, the top
23 lines of the screen are reserved for your information.
First, a little background on database files. A database file
consists of a group of individual entries called "records". A record
might be a recipe, information on an employee, or an address book
listing. Each record is further subdivided into groups of
information called "fields". In an employee record, one field might
contain the date the employee was hired, and another might have his
zip code. One of the fields in each record is predefined as the "key
field". This is the field that best identifies each record, and will
be used to retrieve the record from the file. If a file contained
records of inventory parts, you might designate the inventory number
as the key field. In an address list, you might use the person's
last name as a key field.
Why the last name instead of the full name? Ultra-Mind works best in
applications where you know the key field. It's easy to forget
whether you entered a person as George Smith or W. G. Smith, so the
last name system would work best. If you're not sure of the key
field exactly, there is a mechanism for still finding the record, but
it is much slower.
UM-3)
O.K., back to the program. At the bottom of the screen, you should
see the message:
<Key Field>, Page 1: Use arrow keys to position cursor, then press
<H>.
There are three parts to a field, it's number (the key field is
always field number 1), the field prompt (that tells you what to
enter), and the input field area itself. Directly above the message
area in the center you should see a diamond character. This is
Ultra-Mind's "cursor", and is what you will move around to point to
different areas of the screen. Practice moving the cursor around
with the arrow keys (or the number keys 8=up, 2=down, 6=right, and
4=left). Notice that if you press the Home key (or 7 key), the
cursor jumps to the upper left hand corner of the screen. The PgUp
(or 9) key moves the cursor to the upper right, the PgDn (or 3) moves
to the lower right, and the End (or 1) key moves the cursor to the
lower left corner. Select a place that will be appropriate for the
key field and press the 'H' key. Notice that the characters "1)"
appear where the cursor used to be. That's the field number that
will make it easy for you to later tell the generated program which
field you want to update or search for.
At the bottom of the screen, a new message appears telling you to
enter the field prompt you wish to use. Type in a descriptive
message that will prompt the user to type in the correct information
for that field (like NAME: or PART NUMBER:, for instance). You have
up to 50 characters for the field prompt, and you can leave it blank
should you wish. The program will again ask you to position the
cursor and press the <H> key. Don't worry about moving the cursor
over other characters on the screen, it's doesn't destroy what it
moves over. Don't allow your information to overlap other fields,
though, or you will get an error message.
When you've positioned the cursor and pressed the H key, you'll see
your field prompt appear at that location. Now, we must tell the
computer what type of field this is. The different field types each
ask different questions, so we'll cover them one at a time.
NUMERIC
-------
This type of field is composed only of numeric symbols, that is 0-9,
the plus and minus signs and the decimal point (period). Although it
is kept as a string of characters in the disk file, it is converted
into a number when displayed by the generated program. Only numeric
fields can be used by calculation fields (described below).
When you select this type of field, you will be asked to type in the
length of the field. This is the number of characters that the
largest possible number that can be entered will have. FOR ALL
FIELDS, THE FIELD NUMBER, FIELD PROMPT, AND INPUT FIELD MUST NOT BE
GREATER THAN 79 CHARACTERS LONG TOTAL. Because the number of fields
is limited only by your computer's memory (and believe us, you have
plenty of room), this really isn't a problem. Just split up extra
long fields into smaller ones. You will then be asked to locate the
cursor and press <H>. When you have done so, the input field appears
as a series of small boxes. This field now looks exactly as it will
on the data entry screen of the generated program.
UM-4)
There is still more information the computer needs about this field.
It next asks if you wish to restrict input characters. If you type
"N", any numeric character can be typed into the field. If you
answer "Y", you will be shown a list of all numeric characters and
asked to type an "X" under the characters you wish to restrict. Type
a space under those you wish to allow. Those characters that you
restrict will be dead on the keyboard during entry of this field.
Now the program asks you how many lines of edit checking you wish to
have. If you don't wish to check the field for entry errors, just
type a 0. Otherwise, for each edit check you'll be asked to enter an
edit string. The format for an edit string is:
TESTSYMBOL VALUE
Where TESTSYMBOL is either a > (greater than), < (less than), or =
(equal to), and VALUE is a number. Edit checks should be entered in
the negative. In otherwords the edit check:
< 52
will tell the operator they've made an error only if the number they
enter into this field is less than 52.
Finally, you'll be asked if you wish to use a special printing format
when this field is later displayed. If you do, just type the format
as you would the format string in a BASIC PRINT USING statement
(without surrounding quotes). You should consult your BASIC manual
on the PRINT USING statement if you're unsure of this. As an
example, if a field contained the number 342342.345 and your special
printing format was ###,###.## the number would be displayed as
342,342.34 when the record is displayed later.
ALPHANUMERIC
------------
This field is used for entries that are either all alphabetic or
mixed letters, symbols, and numbers. Even if a number is entered
into an alphanumeric field, it will be considered only a string of
characters, and calculation fields cannot use it.
This type of field needs the same type of information as numeric
fields in the way of field position, field length, and input
character restriction, except that it does not ask for edit checks or
special printing formats. There is only one type of edit check for
alphanumeric fields and that is for a null entry (<ENTER> pressed
without entering any characters). Null entries can be allowed in any
field except the key field.
FORMATTED NUMERIC
-----------------
This is a special type of field that allows you to enter numbers into
a "template". For instance, the parentheses, space, and hyphen in
the following number (323) 343-3423 identify it as a phone number.
Although formatted numeric fields are handy for entering numeric data
into a template, the resulting number is treated as a string of
characters, including the special symbols used in the template, and
cannot be used by calculation fields. After locating the cursor
where you wish the input template to appear and pressing H, the
computer will ask you to enter your special format. Any special keys
can go into the template except the backslash (\). The backslash is
used to show where the input numbers will be located. If we wanted a
phone number field like the one above, we would enter our format as:
(\\\) \\\-\\\\
UM-5)
When it's displayed on the screen, the backslashes will be converted
to the familiar small input boxes. Pay attention to your format, as
its a bit easy to get confused. For example, the format:
\\/\\/\\
could actually be used for entry of a date. Look closely and see how
it would displayed. (Hint: 01/14/84).
CALCULATED
----------
This type of field is not entered by the user at all. It is
calculated from values in other numeric fields. It is not displayed
at all during the data entry process, only later when the record is
retrieved from the file and displayed. It's helpful to know BASIC's
format for specifying formulas when using this type of field. You
need to pay attention to what the field numbers are of the numeric
fields to be used and the resulting calculation field. Here's an
example. If we were working on field 5 and we specified a
calculation field, the computer would ask us how many calculation
lines we wished to have. For this example we'll just do something
simple in a single calculation line. To specify numeric or
calculation fields in a calculation line, use the symbols F# followed
by the field number in parentheses. O.K., let's add the values in
field 2 and field 4 and display that in our calculation field (field
5, remember?). Here's how our calculation line would look:
F#(5)=F#(2)+F#(4)
You can do all kinds of tricky things with calculation fields, and
it's easy to get yourself in trouble with them, so practice is in
order before using them. If you need to store temporary values in a
variable, use the variables U1# through U100#.
You can also specify a special printing format for this field, just
as you can for numeric fields.
DATE AND TIME FIELDS
--------------------
These field types are also done automatically, but in the data entry
stage. It permanently stores the date or time in the field at the
moment of data entry. It's useful for fields such as "Last Updated
ON: 03-15-1983". Just use the U>pdate function on these fields each
time you update a record.
Each time you finish entering a field, you are presented with a list
of choices:
1) Enter new field, 2) Start new page, 3) Enter non-field symbols, 4)
Quit.
Select "Enter new field" to continue adding fields to that page.
Whoops! What's a page? Well, that's a special feature of Ultra-Mind
that keeps your screens from getting cluttered. You can have as many
display screens (called "pages") as you wish. When you select "Start
new page" the screen layout area is erased and you continue with a
fresh slate.
The "Enter non-field symbols" option is used to "prettify" your
screen layouts with titles, borders, etc. When you select this
option, you will again be asked to locate the cursor where you wish
to place the symbols. Then you will asked to enter the symbols you
wish to place there. There are two different ways to specify the
UM-6)
characters:
1) Just type them in from the keyboard. (Note: your string cannot
begin with an "@" symbol).
2) Using a special syntax. The syntax is:
@,REPEAT,ASCIICODE,ASCIICODE,ASCIICODE...etc.
The @ symbol in the first position tells the computer that the
special syntax follows. The REPEAT is a numeric value that tells
how many times to repeat the following symbols. The ASCIICODE's
are the ASCII values of the symbols you with to display.
Confusing? It's easier than it sounds. Let's look at a couple of
examples:
@,79,61
would print a string of 79 equal signs (ASCII code 61).
@,10,40,41
would print the sequence () ten times for a total length of 20
characters. It would look like this:
()()()()()()()()()()
The reason for using this syntax is so you can draw vertical lines
of characters on the screen. Try this sequence:
@,10,42,31,29
It should have drawn a vertical line of 10 equal signs. The
special codes 31 and 29 are used to move the cursor down a row and
backspace one character after each equal sign is printed. The
special control codes are:
28 - Move right one character
29 - Move left one character
30 - Move up one row
31 - Move down one row
Please note that because of Microsoft BASIC peculiarities, you
won't be able to print a vertical line of more than 13 characters
at one time (all sorts of strange things happen). To get around
this anomaly, just print a string of 13 vertical characters and
then print a string of 10 more just beneath it for a line that
will stretch from top to bottom of the screen. Experimentation is
in order to get the most out of this feature.
If you're like us and don't happen to like digging through the BASIC
manual for the chart of ASCII codes, you might appreciate this
feature: When asked to enter the symbols, just type the @ symbol
alone. You will now enter the <Help> mode. To find out a
character's ASCII code, just type it on the keyboard. Nifty, eh?
One last caveat, the non-field symbols are not checked very closely
for overlapping other screen info, so caution is the word. Wrap
around is allowed on the horizontal only.
When you're all done entering your screen displays, the fun part
starts. Just enter the selection "Quit" and the program will ask
you if you wish to go ahead and generate the database. If you don't,
you can always generate it later by selecting the "Generate an
already defined database" function when first executing this program.
As the program is being written, just sit back and appreciate the
number of hours it would have taken you to do this by hand. All in
all, program generation should take only a few minutes.
UM-7)
During the definition and generation process, a number of important
files are created. The extensions of the programs tell what their
purpose are. Let's assume your program is called TEST. The files
TEST.ATR and TEST.HDR contain information that is used to generate
the program. These are both explained in Appendix A. It's not
necessary to keep these files on your program disk once the program
is generated. In the generation process, two more files are created:
TEST.BAS is your database program, and TEST.BAT is a DOS batch file
used to execute the program. YOU SHOULD ALWAYS USE THE BATCH FILE TO
START YOUR PROGRAM since it sets important record size pointers. If
you choose to compile the program, you can discard the batch file.
Otherwise, to execute your database program, you should exit to DOS,
make sure a copy of BASIC is on your program diskette, and type the
word TEST at a DOS prompt.
The first time this program is loaded will be very time consuming.
If you used the DOS TYPE command to look at the program, you would
see that it is in ASCII format with line numbers out of sequence.
It's a good idea once the program is loaded to break out by pressing
the BREAK key while holding down the CTRL key, and save the program
in compressed format using the BASIC command SAVE "TEST.BAS". The
program can be restarted then by entering the command RUN.
TIPS FOR MAKING DEFINITION A PLEASANT EXPERIENCE
------------------------------------------------
1) Always have a couple of disks with plenty of room and copies of
BASIC on them on hand just in case.
2) There's no way to go back if you make an error during definition,
so move slowly and have some sense of direction. Freestyle coding
can be fast, but you're better off at least having a rough sketch
of what you'd like to end up with before starting. This goes
double if you intend to use edit lines, special printing formats,
or calculation fields.
3) Since the method used to make copies of screen information on the
printer is by pressing the PrtSc key while holding down the SHIFT
key, you'll want to be careful about using non-printable
characters for non-field symbols or in field prompts. They can
cause some printers to do all sorts of wild things.
UM-8) How To Use The Generated Program
--------------------------------
Once the program is loaded as above described, you can remove the
program diskette. After a brief title display, you'll be instructed
to mount your data disk in the drive specified during the generation
process, and press the "C" key. All data disks used by Ultra-Mind
programs must be first initialized with special information. When
you press the "C" key, the program will look for and load in this
information if it exists. Otherwise, it will automatically begin
the initialization process. You will be asked if the data file
should use all available disk space, or if you'd like to specify the
maximum number of records on that diskette. After getting your
choice, initialization will begin. Depending on the number of
records that must be initialized, this can take a few minutes or so.
When choosing the size of your data file, keep this in mind: this
program will work most efficiently when there is lots of room on the
disk. Even though you know your particular program will never have
more than 200 records, go ahead and use all available space. The
"Specify number of records" option is mainly included for testing
purposes. Diskettes are cheap, your time isn't.
You'll also be asked to give the data diskette a "volume label".
Just type in a word or two (Like Disk #1), and record this on the
diskette's label. It just identifies the diskette to the system.
The volume label really serves no function in this program. However,
we envisioned it for our report generator program (forthcoming) so
that you could extend your data file over several diskettes, yet have
them all act as one big file for reports. If you already know that
your file will be too big to put on one data diskette, you might use
this to divide your file (two disks, labeled A-L and M-Z might be an
example for a name list file).
Once this data diskette is loaded into the program, it is important
that you DO NOT REMOVE THE DATA DISKETTE before doing either of two
things:
1) Choose the "X-tend Work To New Data Diskette" function.
2) Choose the "Quit and return to BASIC" function.
Removing or swapping diskettes without doing either of these will at
best confuse the program into not knowing where the hell your data
is and at worst absolutely destroying your data files (ouch).
Data disk in place, initialized, and special information loaded?
Good, now you're in the MAIN MENU area of your program. In the
middle of the screen are your current list of choices, which we'll
cover in a moment, and at the top is some important information about
your data diskette and the current status of the program.
UM-8)
The top of the screen lists the number of initialized records as well
as the number of records you have already entered. It also displays
the volume label name of the current data diskette. At the top left
of the screen is a message marked "Current Record". This is used for
two things, first to let you know that a record has been retrieved
using the "Get A Record" function before updating or deleting it, or
to allow you to continue a "Search For And List Records" function
from a certain point after aborting a search. If no record has been
recently retrieved with the "Get A Record" function, the current
record will be NONE. Otherwise, it will be a number between 1 and
the number of records initialized on that data diskette.
Let's go through the commands on the main menu screen:
GET A RECORD
------------
This simply retrieves an entered record and displays it on the
screen. It will prompt you for the key field of your desired record
and then will search for it. Remember to use the correct case to
enter the key field, as this program views lowercase and uppercase
letters differently. JOE SMITH and joe smith and Joe Smith are each
considered different records. When the record is displayed, you'll
be asked "Is This It (Y/N)?" This allows you to find the correct
record when two or more records have identical key fields. If you
just can't find a record that you know should be in there, use the
"Search For And List Records" to scan through the data file and note
the correct key field.
When the correct record is displayed, you'll see a short menu at the
bottom of the screen. The Update, Delete, and Add functions are
described below. The Menu function takes you back to the main menu
page, and the Switch Page function let's you look at the various
pages of the record, if there are more than one.
SEARCH FOR AND LIST RECORDS
---------------------------
This function is used to list all active (and deleted if you wish)
records in the data file, or to select records on the contents of one
of the fields.
You will first be asked to enter the record # to start the search or
press <ENTER> to start at current record. If you had just completed
a partial search and want to continue from the point you left off,
just press the <ENTER> key. Otherwise, enter the record number you
wish to start the listing with (the first record in a datafile is
record #1). If you press <ENTER> and there is no current record in
memory, the search will begin at record #1. Except for this
function, we don't make much use of record numbers with this system.
Next, you will be asked whether you wish to display records that have
been deleted. Records in a data file exist in one of three states:
Active (meaning it contains a valid record), Deleted (meaning it
contains a record marked as deleted), and Empty (meaning it has not
yet ever contained a record). Accidentally deleted records can be
restored to active status by using this function unless they have
been overwritten by recently added records.
The next prompt is whether you wish to select records for display by
the contents of one it's fields. If you don't, you will see every
record on file.
UM-9)
If you do, you'll be asked which field you wish to test. Then,
you'll be asked to enter a test string. The three types of tests
that can be made on a field are:
>STRING (field contains "STRING" somewhere in it)
<STRING (field begins with "STRING")
=STRING (field contains "STRING" exactly and only)
Once again, lowercase is considered different than uppercase. For
our purposes here at FreeSoft, we don't use lowercase at all for
field information and it makes life much easier.
If a match is found, you have the choice of either continuing the
search or aborting it. If you abort, operation continues just as if
the record were retrieved with the "Get A Record" function.
ADD A RECORD
------------
This function is used to add records to the data file. It is pretty
much a straight ahead entry procedure. After all fields have been
entered, you can proofread the current page and either abort the add
or go ahead and save the record on disk.
DELETE CURRENT RECORD
---------------------
This function is used to mark records as "deleted" status. Deleted
records cannot be retrieved by a "Get A Record" function and can only
be viewed by the "Search For And List Records" function. Deleted
records can be overwritten by newly added records as the space is
needed.
UPDATE CURRENT RECORD
---------------------
Any of a field's records, including the key field, can be modified
using this function. Like the "Delete Current Record" function, the
record must first be retrieved using the "Get A Record Function".
You may wish to review the record and note the field numbers you
want to modify before selecting the "Update Current Record"
function, because the prior contents of a field are erased as soon
as you specify that you wish to modify that field.
X-TEND WORK TO NEW DATA DISKETTE
--------------------------------
This function is used to close the data file on one data diskette and
load the special information from a new one. The new disk must be
already initialized or initialization procedures will begin
automatically. NEVER SWAP DATA DISKETTES WITHOUT SELECTING THIS
FUNCTION FIRST!
INITIALIZE NEW DATA DISKETTE
----------------------------
This is used to perform the initialization procedures on a data
diskette so that it can be used to hold your data file. THIS DOES
NOT LOAD IN THE SPECIAL INFORMATION! Always verify that the volume
label specified in the MAIN MENU display corresponds the data
diskette mounted in the drive before attempting to do any work with
it!
UM-10)
QUIT AND RETURN TO BASIC
------------------------
This is the only approved way of ending the program. Ending the
program by any other means could possibly lead to a destroyed data
file!
Well, that about does it. Chances are good that you'll find many
more undocumented features (hopefully not bugs), that we'll need to
include in the next revision of this manual. We always appreciate
your comments and suggestions. Keep those cards and letters coming
(we always wanted to say that).
UM-11) APPENDIX A: FORMAT OF THE ULTRA-MIND DISK FILES
-----------------------------------------------
Chances are, you're going to want to do some rather exciting and
unusual things with this package. To aid you in your endeaver,
here's a description of the data files used by these programs.
In the following examples, we use the filespec TEST for the program
name.
TEST.HDR
--------
NF - Number of defined fields
ND - Number of defined display pages
TB - Total number of field characters - 1 (one byte variable
STAT$ is added to beginning of each record to hold
record status: A=Active, D=Deleted, E=Empty
TEST.ATR
--------
AU$ - Author's name
NA$ - Program's filespec (including drive but without extension)
TI$ - Program title
For each field defined by NF in TEST.HDR:
PG - Page number
MR - Field prompt row
MC - Field prompt column
M$ - Field prompt string
TY - Field type (1=Numeric, 2=Alphanumeric, 3=Formatted numeric,
4=Calculation, 5=Date, 6=Time, 7=Non-field symbols)
If TY=1
-------
FR - Field row
FC - Field column
FL - Field length
AI$ - String of acceptable input characters
EL - Number of edit lines
For each EL: EL$ - Edit line
SP$ - Special printing format (Y or N)
If SP$="Y": SF$ - special printing format string
If TY=2
-------
FR - Field row
FC - Field column
FL - Field length
AI$ - String of acceptable input characters
If not key field: AI$ - Null entry valid (Y or N)
If TY=3
-------
FR - Field row
FC - Field column
FL - Field length
AF$ - Input format string
AI$ - String of acceptable input characters
UM-12)
If TY=4
-------
FR - Field row
FC - Field column
CL - Number of calculation lines
For each CL: CL$ - Calculation line string
SP$ - Special printing format (Y or N)
If SP$="Y": SF$ - Special printing format string
If TY=5 or TY=6
---------------
FR - Field row
FC - Field column
FL - Field length
If TY=7
-------
No further variables
TEST.VOL
---------
V$ - Volume label string of data diskette
TEST.DEF
--------
MAXSIZE - Number of initialized records on data diskette
GOOD - Number of entered records on data diskette
TEST.DAT
--------
The data file is a variable length random file than varies with the
number of fields, length of fields, etc. Study the blocking and un-
blocking procedures in your generated program to see the format of
your data file.
HASHING ALGORYTHM EXPLAINED
---------------------------
This package uses a hashing routing for placing and retrieveing data
records. Basically, what happens is that your key field is converted
to a number between 1 and the number of initialized records on your
data diskette. This becomes the record number for the record. If a
record is already in that location, the file is scanned sequentially
from that record until an empty or deleted record space is found.
The hashing algorythm we're using was developed and placed in the
public domain by Bruce L. Tonkin and we're indebted to him for its
usefulness.
To be effective, the hashing algorythm must be reasonably "random"
to insure that records will spread out through the available space
instead of clumping together. This is what gives this package such
excellent retrieval speed under typical circumstances.
UM-13) APPENDIX B: WISH LIST
---------------------
For many purposes, this package will be sufficient "off the
shelf". However, we encourage you all to do what you do best: take a
skeleton package and refine it to something really phenomenal.
Here's our wish list for Ultra-Mind:
1) Better documentation: O.K., we admit that this isn't the best in
the world, but it's all in there if you look close enough. This
manual definitely needs a re-write. We'll take responsibility for
this and offer the fact that we wanted to get the darned thing out
as our only excuse.
2) Sample definition (.HDR & .ATR) files: This is the best way for
folks to learn how to get the fanciest use out this package. If
you develope a snazzy file for keeping track of your video tape
collection or christmas card list, why not share it with all of
us. The definition files are rather small, so it's not necessary
to distribute the package in generated form. We'll give this
responsibility to y'all.
3) Report generator program: We're working on this one and it should
be ready in the first quarter of 1984.
4) Better UPDATE function: We sorely need an update function that
uses the INS and DEL keys like an editor instead of wiping out the
field to be replaced. Any of you hot shots care to take this on?
5) Better lineprinter support: A small assembly language program that
would print the screen and turn all non-printable characters into
periods would be great. BASIC routines are just too slow. We
give this one to you also.
6) Definition file editor: Let's make it easy to take a definition
file and either edit, delete, or add field information. This
would be great for "cloning" one data file's information into
a new one, not to mention making it less frustrating when you
make a mistake near the end of a lengthy definition session. Any
takers?
7) A natural evolution would allow you to define how your title
and main menu pages will look.
As you can see, we've got all kinds of suggestions for making this
product better. After all, if we'd taken the time to do everything
to Ultra-Mind that we wanted, you probably would never get it in your
hands. Sooner or later, you just have to take the darn thing and say
"sink or swim, booger".
One thing we do ask is that you not distribute the program in
modified form. Instead, offer your corrections or improvements as
merge files. That way, we can continue to support this package with
updates and corrections from our end. Otherwise, we just won't be
able to keep track of all of the modifications floating around. Be
sure to send us any of your improvements or suggestions, though.
They just might find a permanent home in Ultra-Mind.
UM-14) APPENDIX C: THE ULTRA-UTILITIES
-------------------------------
The FreeSoft Company produces only user supported software. If you
find the software to be useful, we have a registration program so you
can support us. As long as we keep getting the great support
we've enjoyed so far, we'll continue to add packages to our one and
only product: The Ultra-Utilities. Our registration and duplication
policies are in the Library #1 documentation. Do not distribute this
program until you have obtained, read, and understand these policies!
If you don't have the complete 5-volume Ultra-Utility set, you don't
know what you're missing. To get the entire set, read and follow the
below carefully:
1) We now offer two libraries of the Ultra-Utilities. FOR EACH
LIBRARY that you want, send us one double sided, or two single
sided diskettes formatted 8 sectors per track. Do not send
diskettes formatted 9 sectors per track or we'll just waste our
time reformatting them.
2) Send them to us along with a POSTAGE PAID, SELF-ADDRESSED RETURN
MAILER. A couple of stiff pieces of cardboard is suggested for
envelope mailers. We will not try to protect your diskettes from
damage any better than you do. Also, please make sure that you've
got the correct amount of postage. We hate to bitch, but we
sometimes get up to 5 requests per day that arrive postage due.
3) Send this conglomeration to: The FreeSoft Company, P.O. Box 27608,
St. Louis, MO 63146. Drop a note in the envelope telling us
which library you want and where you heard about us. If you don't
send enough disks for both libraries, we'll assume you want only
Library #1.
The Ultra-Utilities Includes:
LIBRARY#1
---------
ULTRA-ZAP: disk repair/modification utility with functions for
display/modify disk sectors, display/modify file sectors, copy disk
sectors, fill disk sectors, search for byte sequences (ASCII or
numeric) in disk sectors, search for byte sequences in file sectors,
interrogate disk format and protection schemes, modify BIOS disk
parameter table.
ULTRA-FORMAT: functions for formatting single standard tracks,
re-format a "flaky" track without erasing old data, and format a
non-standard (copy protected) track.
ULTRA-FILE: functions for display file's directory information,
assign or remove hidden status, assign or remove system status,
display list of sectors allocated to a file, build a disk file from
scratch, restore accidentally erased files, produce a unique roadmap
of a diskette, and selectively kill files from a menu.
UM-14)
LIBRARY #2
----------
ULTRA-OPTIMIZE: takes a standard BASIC program saved in ASCII format
and optimizes it so that the /N switch can be used with the BASIC
compiler to produce smaller and more efficient object code.
ULTRA-MIND: intelligent database generator program that allows you to
define a database with six different field types, full input control,
and multiple full screens, and generates a unique BASIC program that
offers record access in typical applications in less than 1/2 second
(no matter how many records in the file).
Coming soon to LIBRARY #2: Ultra-Report: report program generator for
databases created with Ultra-Mind.
All of the Ultra-Utilties work with PC-DOS versions 1.10, 2.00 and
2.10
UM-15) APPENDIX D: LIMITED LICENSE FOR ULTRA-MIND
------------------------------------------
U-MIND.BAS and SKELETON.BAS are copyrighted programs and are owned
soley by The FreeSoft Company. You are free to use and distribute
these and all other Ultra-Utility programs under the policies set
forth in the LIBRARY #1 documentation manual. By using this
software, you agree not to distribute or duplicate any Ultra-Utility
program until you have obtained, read, and understand all duplication
and registration policies listed in that manual.
You agree not to distribute any Ultra-Utility program in modified
form and you agree not remove any information concerning The FreeSoft
Company, it's products or copyrights from the programs or
documentation.
The FreeSoft Company gives sole ownership to you for all programs
generated by Ultra-Mind. You agree not to copyright such programs as
not to interfere with our existing copyrights. Otherwise, you are
free to compile, modify, sell, or destroy any programs generated by
Ultra-Mind. No royalties are due The FreeSoft Company under any
circumstance for the sale of programs generated by Ultra-Mind.
If you have a problem with the above policies, we'll be willing to
consider a special license for registered users only.